class ExKickVoteMultiColumnList extends KickVoteMultiColumnList;

function LoadPlayerList(VotingReplicationInfo LoadVRI)
{
	local GameReplicationInfo GRI;
	local int i,x;
	//Log("LoadPlayerList33551");
	if( LoadVRI == none )
		return;
	else
		VRI = LoadVRI;

	GRI = PlayerOwner().GameReplicationInfo;

	KickVoteData.Remove(0,KickVoteData.Length);
	for(i=0; i<GRI.PRIArray.Length; i++)
	{
		if(!( (GRI.PRIArray[i].PlayerName ~= "WebAdmin" || GRI.PRIArray[i].PlayerName ~= "DemoRecSpectator") &&
			GRI.PRIArray[i].bIsSpectator &&
			GRI.PRIArray[i].bOnlySpectator &&
			GRI.PRIArray[i].bOutOfLives)  // dont show web admin or DemoRec spectators
			&&
			!GRI.PRIArray[i].bBot &&  // dont show bots
			!GRI.PRIArray[i].bAdmin)  // Dont show admins they can't be kicked anyway
		{
			KickVoteData.Insert(KickVoteData.Length,1);
			PlayerName.Insert(KickVoteData.Length-1,1);
			PlayerName[KickVoteData.Length-1] = GRI.PRIArray[i].PlayerName;
			KickVoteData[KickVoteData.Length-1].PlayerID = GRI.PRIArray[i].PlayerID;
			if( GRI.PRIArray[i].Team != none)
				KickVoteData[KickVoteData.Length-1].Team = GRI.PRIArray[i].Team.TeamIndex;
			else
				KickVoteData[KickVoteData.Length-1].Team = 255;

			KickVoteData[KickVoteData.Length-1].KickVoteCount = 0;
			// find and retrieve the vote count from VRI
			for( x=0; x<VRI.KickVoteCount.Length; x++ )
			{
				if( KickVoteData[KickVoteData.Length-1].PlayerID == VRI.KickVoteCount[x].PlayerID )
				{
					KickVoteData[KickVoteData.Length-1].KickVoteCount = VRI.KickVoteCount[x].KickVoteCount;
					break;
				}
			}
			AddedItem();
		}
	}
	setTimer(4, true); // check for updates to player list every 4 seconds
	OnDrawItem  = DrawItem;
}

function Timer()
{
	local GameReplicationInfo GRI;
	local int i,x,TeamIndex;
	local int PlayerID;
	local bool bFound;
	//Log("LoadPlayerList33551");
	Super.Timer();

	GRI = PlayerOwner().GameReplicationInfo;

	// Add new players to list
	for(i=0; i<GRI.PRIArray.Length; i++)
	{
		PlayerID = GRI.PRIArray[i].PlayerID;
		if( GRI.PRIArray[i].Team != none)
			TeamIndex = GRI.PRIArray[i].Team.TeamIndex;
		else
			TeamIndex =  255;

		if(!( (GRI.PRIArray[i].PlayerName ~= "WebAdmin" || GRI.PRIArray[i].PlayerName ~= "DemoRecSpectator") &&
			GRI.PRIArray[i].bIsSpectator &&
			GRI.PRIArray[i].bOnlySpectator &&
			GRI.PRIArray[i].bOutOfLives)  // dont show web admin or DemoRec spectators
			&&
			!GRI.PRIArray[i].bBot &&  // dont show bots
			!GRI.PRIArray[i].bAdmin)  // Dont show admins they can't be kicked anyway
		{
			bFound = false;
			for(x=0;x < KickVoteData.Length; x++)
			{
				if( KickVoteData[x].PlayerID == PlayerID )
				{
					bFound = true;
					// check for name change
					if( PlayerName[x] != GRI.PRIArray[i].PlayerName )
						PlayerName[x] = GRI.PRIArray[i].PlayerName;
					break;
				}
			}

			if(!bFound)
			{
				KickVoteData.Insert(KickVoteData.Length,1);
				PlayerName.Insert(KickVoteData.Length-1,1);
				PlayerName[KickVoteData.Length-1] = GRI.PRIArray[i].PlayerName;
				KickVoteData[KickVoteData.Length-1].PlayerID = PlayerID;
				KickVoteData[KickVoteData.Length-1].Team = TeamIndex;
				KickVoteData[KickVoteData.Length-1].KickVoteCount = 0;
				// find and retrieve the vote count from VRI
				for( x=0; x<VRI.KickVoteCount.Length; x++ )
				{
					if( KickVoteData[KickVoteData.Length-1].PlayerID == VRI.KickVoteCount[x].PlayerID )
					{
						KickVoteData[KickVoteData.Length-1].KickVoteCount = VRI.KickVoteCount[x].KickVoteCount;
						break;
					}
				}
				AddedItem();
			}
		}
	}

	// Remove missing players from list
	for(i=0;i < KickVoteData.Length; i++)
	{
		PlayerID = KickVoteData[i].PlayerID;
		bFound = false;
		for(x=0; x<GRI.PRIArray.Length; x++)
		{
			if( PlayerID == GRI.PRIArray[x].PlayerID )
			{
				bFound = true;
				break;
			}
		}

		if(!bFound)
		{
			PlayerName.Remove(i,1);
			KickVoteData.Remove(i,1);
			for( x=0; x<SortData.Length; x++ )
			{
				if( SortData[x].SortItem == i )
				{
					SortData.Remove(x,1);
					InvSortData.Remove(x,1);
					break;
				}
			}
			ItemCount--;
			OnSortChanged();
		}
	}
}

defaultproperties
{
}
